#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTimer>

/**
 * @brief 绘制消息列表的搜索模块
 *
 * 该函数创建一个QLabel控件，用于显示消息列表的搜索框背景图。
 * 设置其位置、大小和背景图片。
 */
void MainWindow::dorweMessageList_search()
{
    QLabel *MessageList_Search = new QLabel(this);
    MessageList_Search->setGeometry(57, 0, QT_MESSAGELIST_WIDTH, QT_MESSAGELIST_SEARCH_HEIGHT);
    MessageList_Search->setStyleSheet("background-image: url(../weChat/images/searchIMG.png);border-right:1px solid #e9e9e9;");
}

/**
 * @brief 绘制消息列表的盒子模块
 *
 * 该函数创建一个QListWidget控件，用于显示消息列表。
 * 设置其位置、大小和样式，并遍历消息数据列表，为每个消息项调用dorweMessageList_item函数进行绘制。
 * 最后为QListWidget绑定点击事件。
 */
void MainWindow::dorweMessageList_Box()
{
    qDebug() << "dorweMessageList_Box执行了" << messageListDatas.size() << endl;
    listWidget = new QListWidget(this);
    listWidget->setGeometry(57, 62, QT_MESSAGELIST_WIDTH + 1, QT_HEIGHT - QT_MESSAGELIST_SEARCH_HEIGHT);
    listWidget->setStyleSheet("border-left: 0px;border-top: 0px;border-bottom: 0px;border-right: 1px solid #e9e9e9;background-color: #e9e8e8;");
    for (size_t i = 0; i < messageListDatas.size(); i++)
    {
        dorweMessageList_item(i, listWidget);
    }
    // 给listWidget绑定点击事件
    QObject::connect(listWidget, &QListWidget::itemClicked, this, &MainWindow::dorweMessageList_item_click);
    listWidget->show(); // 确保 QListWidget 显示
    this->update();     // 强制刷新界面
}

/**
 * @brief 处理消息列表项的点击事件
 *
 * 该函数在用户点击消息列表项时被调用，更新当前激活的消息项索引，并根据激活状态更新列表项的样式。
 * 同时，绘制聊天窗口的各个部分。
 *
 * @param item 被点击的QListWidgetItem对象
 */
void MainWindow::dorweMessageList_item_click(QListWidgetItem *item)
{
    MessageListActiveIndex = item->data(Qt::UserRole).toInt();

    chatWindow_title = messageListDatas[MessageListActiveIndex].isGroup ? messageListDatas[MessageListActiveIndex].groupName : messageListDatas[MessageListActiveIndex].userName;
    qDebug() << chatWindow_title;
    tcpFn->tcp_send(1002);
    // 更新QListWidget的试图
    for (int i = 0; i < listWidget->count(); ++i)
    {
        QListWidgetItem *currentItem = listWidget->item(i);
        QWidget *widget = listWidget->itemWidget(currentItem);
        if (i == MessageListActiveIndex)
        {
            widget->setStyleSheet("background-color: #c4c4c4;");
        }
        else
        {
            widget->setStyleSheet("*:hover { background-color: #d8d8d8; }");
        }
    }
    // 更新聊天窗口
    ChatWindowUpdate();
};

/**
 * @brief 绘制消息列表的单个子项
 *
 * 该函数为消息列表中的每个子项创建一个QListWidgetItem，并设置其大小和数据。
 * 同时，创建一个自定义的QWidget，用于显示头像、好友名称和聊天文本。
 *
 * @param i 消息项的索引
 * @param listWidget 消息列表的QListWidget对象
 */
void MainWindow::dorweMessageList_item(int i, QListWidget *listWidget)
{
    qDebug() << "MessageList_item这里执行没 ";
    // 创建 QListWidgetItem
    QListWidgetItem *item = new QListWidgetItem(listWidget);
    item->setData(Qt::UserRole, i);
    item->setSizeHint(QSize(225, 65)); // 设置 Item 大小
    // 创建自定义 QWidget
    QWidget *widget = new QWidget;
    if (i == MessageListActiveIndex)
    {
        // 设置样式
        widget->setStyleSheet("background-color: #c4c4c4;");
    }
    else
    {
        // 设置鼠标移入背景色
        widget->setStyleSheet("*:hover { background-color: #d8d8d8; }");
    }

    // 头像
    QLabel *headImgLabel = new QLabel(widget);
    headImgLabel->setFixedSize(40, 40);
    QString headImgPath;
    if (messageListDatas[i].isGroup)
    {
        headImgPath = QString("background-image: url(../weChat/images/groupHeadImg.png); border-radius: 0px;");
    }
    else
    {
        headImgPath = QString("background-image: url(../weChat/images/head%1.png); border-radius: 0px;").arg(messageListDatas[i].userId);
    }
    headImgLabel->setStyleSheet(headImgPath);
    // 好友名称
    QString name = messageListDatas[i].isGroup ? messageListDatas[i].groupName : messageListDatas[i].userName;
    QLabel *nameLabel = new QLabel(name, widget);
    nameLabel->setStyleSheet("color: #333333; font-size: 14px;line-height: 20px;margin-top: 10px;background-color: transparent;border-right: 0px;"); // 设置名称样式

    // 聊天文本
    QLabel *textLabel = new QLabel(messageListDatas[i].message, widget);
    textLabel->setStyleSheet("color: #999999; font-size: 12px;line-height: 20px;margin-bottom: 10px;background-color: transparent;border-right: 0px;"); // 设置文本样式

    // 使用水平布局排列头像和右侧内容
    QHBoxLayout *hLayout = new QHBoxLayout(widget);
    hLayout->addWidget(headImgLabel); // 添加头像
    hLayout->setSpacing(10);          // 设置头像与右侧内容的间隔

    // 使用垂直布局排列好友名称和聊天文本
    QVBoxLayout *vLayout = new QVBoxLayout();
    vLayout->addWidget(nameLabel);           // 添加好友名称
    vLayout->addWidget(textLabel);           // 添加聊天文本
    vLayout->setSpacing(3);                  // 设置名称与文本的间隔
    vLayout->setContentsMargins(0, 0, 0, 0); // 去除默认边距

    // 将垂直布局添加到水平布局中
    hLayout->addLayout(vLayout);
    hLayout->setContentsMargins(5, 5, 5, 5); // 设置整体边距

    // 设置布局
    widget->setLayout(hLayout);

    // 将 QWidget 绑定到 QListWidgetItem
    listWidget->setItemWidget(item, widget);
    
};
/**
 * @brief 绘制消息列表
 *
 * 该函数依次调用dorweMessageList_search和dorweMessageList_Box函数，绘制消息列表的搜索模块和盒子模块。
 */
void MainWindow::dorweMessageList()
{
    dorweMessageList_search();
    dorweMessageList_Box();
    QLabel *MessageList_SearchDemo = new QLabel(this);
    MessageList_SearchDemo->setGeometry(57, QT_MESSAGELIST_SEARCH_HEIGHT*2, QT_MESSAGELIST_WIDTH, QT_MESSAGELIST_SEARCH_HEIGHT);
    MessageList_SearchDemo->setStyleSheet("background-image: url(../weChat/images/searchIMG.png);border-right:1px solid #e9e9e9;");
    qDebug() << "dorweMessageList这里执行可以更新视图 ";
}

void MainWindow::MessageListUpdate()
{
    if (listWidget) {
        listWidget->clear();
        delete listWidget;
        listWidget = nullptr;
    }
    dorweMessageList_Box();
    qDebug() << "MessageListUpdate这里执行不会更新视图";
}